import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: LIUYANJIAO
 * Date: 2024-11-12
 * Time: 13:58
 */
public class test {

class Node {
    int val;
    Node next;
    Node random;

    public Node(int val) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}
////首先创建一个map,用于存储原链表的节点和新链表的节点
//    Map<Node,Node> map=new HashMap<>();
//    public Node copyRandomList(Node head) {
//    if(head==null) return null;
//    if(!map.containsKey(head)){
//        //map中没有head节点，add
//        //创建新的节点用于存储新的指针
//        Node newnode=new Node(head.val);
//        map.put(head,newnode);
//        //创建head.next的新节点，并且newnode的next指针指向它
//        //map可以根据head节点直接查找上一个创建的newnode新节点
//        map.get(head).next=copyRandomList(head.next);
//        //创建head.randrom的新节点，并且newnode的randrom指针指向ta
//        map.get(head).random=copyRandomList(head.random);
//    }
//    return map.get(head);
//    }
    public static List<String> topKFrequent(String[] words, int k) {
        //创建一个map
        Map<String,Integer> map=new TreeMap<>();
        //遍历String，如果不存在，添加key，如果存在key对应的value+1；
        for (int i = 0; i < words.length; i++) {
            if(!map.containsKey(words[i])){
                map.put(words[i],1);
            }else {
                //由于map无法直接value,所以可以重新插入，因为map的key不能相同，所以先前的数据会被自动删掉
                map.put(words[i],map.get(words[i])+1);
            }
        }
        //TreeMap默认排序方式为用key排序，现在改为用value排序
        List<Map.Entry<String,Integer>> list=new ArrayList<>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o2.getValue()-o1.getValue();
            }
        });
        List<String> list1=new ArrayList<>();

        for(int i=0;i<k;i++){
           //将前k个节点中的key复制到list中返回
            list1.add(list.get(i).getKey());
        }
        return list1;
    }

    public static void main(String[] args) {
    String[] strings={"the","day","is","sunny","the","the","the","sunny","is","is"};
        topKFrequent(strings,4);

    }
}
